// 二次封装
// 导入axios
import axios from 'axios';

// 导入进度条
import NProgress from 'nprogress';
import  'nprogress/nprogress.css';

// 关于token读取操作和user用户信息操作工具 - 本地存储
import {getToken,removeToken,removeUser}  from '../utils/storageUtils';


// 创建一个axios对象
const request = axios.create({
    // baseURL:'/api',
    baseURL:'http://localhost:8081', //基础url 
    timeout:20000 //超时时间
});



// 写请求拦截器
request.interceptors.request.use((config)=>{

    //1. 开启进度条
    NProgress.start();

    // 获取token
    let token = getToken();

    // 2. 设置请求头中的token - 每次发送请求时，自动携带请求头
    if(token){
        config.headers.token = token;
    }

    //3. 返回配置
    return config;
})

// 响应拦截器
request.interceptors.response.use((response)=>{

    //1. 进度条结束
    NProgress.done();

    //2. 返回数据二次修改
    return response.data;
},(err)=>{
    //1. 关闭进度条
    NProgress.done();

    //2.失败后的统一处理

    let errCode = err.response.status;

    // 判断状态码是否为401 - 如果是401 token验证失败
    if(errCode === 401){
        //token验证失败

        // 删除本地token
        removeToken();
        // 删除会话user
        removeUser();

        // 跳转到登录页
        window.location = '/login.html'; 
    }else{
        // 弹出具体的错误信息
        alert(err.message)
    }

    // 抛出错误对象，以便于后续处理
    throw err;
})

// 暴露axios方法
export default request;

